/**
 * @User: vitobo
 * @Date: 2024-03-04
 * @Description: 运算符学习
 */


public class Operator {

    public static void main(String[] args) {
        // 条件运算符
        int a = 10;
        int b = 20;
        int max = a > b ? a:b;
        System.out.println(max);


        // 运算符优先级 存在歧义的代码上加括号
        int c = (a + (b-a)) >> 1;
        System.out.println(c);
    }

    public static void main8(String[] args) {
        // 移位运算符
        // << 左移 每左移一位, 乘2
        int a = 10;
        System.out.println(a<<1);


        // >> 右移 每右移一位, 左边补符号位
        int b = 10;
        System.out.println(b>>2);

        // >>> 无符号右移,左边补0
        System.out.println(-10>>>1);
    }

    public static void main7(String[] args) {
        // 位运算符 & | ^ ~
        // 按位与, 对应位上如果有0就是0
        // 按位或, 这一位是1 就是1;
        // 按位异或, 不一样的进行或,  一样的结果为0
        // 按位取反,

    }
    public static void main6(String[] args) {
        // 逻辑运算符 与&& 或|| 非!
        int a = 1;
        int b = 2;

        // 逻辑与
        // 程序报错,逻辑操作两个表达式必须都是布尔表达式
        // 如果第一个表达式为假,则不会执行第二个表达式
        // System.out.println(a && b);


        // 逻辑或
        // 只要有一个表达式为真, 则整体为真
        // 第一个表达式为真, 则不会执行第二个


        // 逻辑非
        System.out.println(!(true));

    }
    public static void main5(String[] args) {
        // 关系运算符  输出结果为 true或false
        // Java中, 比较时只能使用两个操作数
        int a = 11;
        int b = 12;
        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a>=b);
        System.out.println(a<=b);

//        int a = 10;
//        a = a++;
//        System.out.println(a); // 10
    }


    public static void main4(String[] args) {
        int a = 10;
        int b = a++; // 先赋值后自增
        int c = ++a; // 先自增后赋值
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);

    }

    public static void main3(String[] args) {
        // 增量操作符
        int a = 1;
        // a = a+1;
        a += 1;
        System.out.println(a);

        double d = 12.5;
        // a = (int)(a+d);
        a += d; // 可以自动进行类型转换

    }

    public static void main2(String[] args) {

        // 两侧操作数类型不一致时, 向类型大的提升

        // 算术异常, 除0
        // System.out.println(10/0);

/*        System.out.println(12.5 % 10.5);
        System.out.println(11 % 10.5);
        System.out.println(-11 % 10.5);*/


/*        System.out.println(10%3);  // 1
        System.out.println(-10%3); // -1
        System.out.println(10%-3); // 1
        System.out.println(-10%-3); // -1*/


/*
        System.out.println(5/2);   // 2
        System.out.println(5.0/2); // 2.5
        System.out.println(5/2.0); // 2.5
        System.out.println((float)5/2); // 2.5
        System.out.println(5/(float)2); // 2.5
        System.out.println((float) 5/2); //2.0
*/

    }


    public static void main1(String[] args) {
        // 转义字符
        System.out.println("\\\"hello\\\"");

        short a = 128;
        byte b = (byte)a;
        System.out.println(a);
        System.out.println(b);  // -128

    }


}
